﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Modelo;
using System.Data.SqlClient;
using System.Globalization;

namespace AccesoDatos
{
    public static class BDProducto
    {
        public static string connect = "Data Source=.\\sqlexpress; Initial Catalog=BitFood; Integrated Security=true";
        public static Producto InsertarProducto(Producto product)
        {
            if (product != null)
            {
                SqlConnection connection = null;
                try
                {
                    connection = new SqlConnection(connect);
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = "INSERT INTO Producto(Nombre, Cantidad,UnidadDeMedida, Precio, Detalle) VALUES(@Name,@Quantity,@Measure,@Price,@Detail)";
                    command.Parameters.AddWithValue("Name", product.Nombre);
                    command.Parameters.AddWithValue("Quantity", product.Cantidad);
                    command.Parameters.AddWithValue("Measure", product.Medida);
                    command.Parameters.AddWithValue("Price", product.Precio);
                    command.Parameters.AddWithValue("Detail", product.Detalle);
                    connection.Open();
                    int result = command.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception("Error al insertar producto");
                    }
                    
                }
                catch (SqlException ex)
                {
                    throw new Exception("Error al insertar producto", ex);
                }
                finally
                {
                    if (connection != null)
                    {
                        connection.Close();
                    }
                    SqlConnection.ClearAllPools();
                }
            }

            return product;
        }
        public static void EliminarProducto(Producto product)
        {
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(connect);
                SqlCommand cmd = connection.CreateCommand();
                cmd.CommandText = "delete from Producto where Nombre=@name";
                cmd.Parameters.AddWithValue("name", product.Nombre);
                connection.Open();
                int result = cmd.ExecuteNonQuery();
                if (result <= 0)
                {
                    throw new Exception("Error deleting a product");
                }

            }
            catch (SqlException ex)
            {

                throw new Exception("Error deleting a product", ex);
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
                SqlConnection.ClearAllPools();
            }
        }
        public static Producto ObtenerProductPorNombre(string nombre)
        {
            Producto product = new Producto();
            SqlConnection connection = null;
            try
            {
                connection = new SqlConnection(connect);
                SqlCommand command = connection.CreateCommand();
                command.CommandText = "SELECT * FROM Producto WHERE Nombre=@nombre";
                command.Parameters.AddWithValue("nombre", nombre);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                if (!reader.HasRows)
                {
                    return null;
                }
                while (reader.Read())
                {
                    product.Nombre = nombre;
                    product.Precio = float.Parse(reader["Precio"].ToString());
                    product.Medida= reader["UnidadDeMedida"].ToString();
                    product.Detalle = reader["Detalle"].ToString();   
                }
            }
            catch (SqlException ex)
            {
                throw new Exception("Error al obtener producto", ex);
            }
            finally
            {
                if (connection != null)
                {
                    connection.Close();
                }
                SqlConnection.ClearAllPools();
            }
            return product;
        }
        public static void EditarProducto(Producto product)
        {
            //if (product != null)
            //{
                SqlConnection connection = null;
                connection = new SqlConnection(connect);
                try
                {
                    SqlCommand command = connection.CreateCommand();
                    command.CommandText = "UPDATE Producto SET Detalle=@Description,Precio=@Price,UnidadDeMedida=@Medida WHERE Nombre=@Name";
                    command.Parameters.AddWithValue("Description", product.Detalle);
                    command.Parameters.AddWithValue("Price", product.Precio);
                    command.Parameters.AddWithValue("Medida", product.Medida);
                    command.Parameters.AddWithValue("Name", product.Nombre);
                    connection.Open();
                    int result = command.ExecuteNonQuery();
                    if (result <= 0)
                    {
                        throw new Exception("Error modifying a product");
                    }
                }
                catch (SqlException ex)
                {
                    throw new Exception("Error modifying a product", ex);
                }
                finally
                {
                    if (connection != null)
                    {
                        connection.Close();
                    }
                    SqlConnection.ClearAllPools();
                }
            //}
        }
        public static List<Producto> Productos()
        {
            SqlConnection conexion = null;
            SqlCommand comando = null;
            List<Producto> productos = new List<Producto>();
            try
            {
                conexion = new SqlConnection(connect);
                comando = conexion.CreateCommand();
                comando.CommandText = "select * from Producto";
                conexion.Open();
                SqlDataReader reader = comando.ExecuteReader();
                if (!reader.HasRows)
                    return null;
                else
                {
                    while (reader.Read())
                    {
                        Producto producto = new Producto();
                        producto.Nombre = reader["Nombre"].ToString();
                        producto.Cantidad = float.Parse(reader["Cantidad"].ToString());
                        producto.Detalle = reader["Detalle"].ToString();
                        producto.Medida = reader["UnidadDeMedida"].ToString();
                        producto.Precio = float.Parse(reader["Precio"].ToString());
                        productos.Add(producto);
                    }
                    return productos;
                }
            }
            catch (SqlException)
            {
                return null;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
        }
        


        public static DateTime getFechaDiario(DateTime dateTime, string producto)
        {
            SqlConnection SQL_conn = null;
            SqlCommand comando = null;
            SqlDataReader reader= null;
            DateTime fecha = new DateTime() ;
            try {
                SQL_conn = new SqlConnection(connect);
                comando = SQL_conn.CreateCommand();
                comando.CommandText = "SELECT Fecha FROM Ingrediente,MenuDiario,Comida WHERE Comida.IdComida = MenuDiario.IdComida and Comida.IdReceta=Ingrediente.IdReceta and Ingrediente.IdProducto=@producto and Fecha >= @fecha";
                comando.Parameters.AddWithValue("producto",producto);
                comando.Parameters.AddWithValue("fecha",dateTime);
                SQL_conn.Open();
                reader = comando.ExecuteReader();
                if (reader.HasRows)
                {
                    reader.Read();
                    fecha = (DateTime)reader["Fecha"];
                    
                }
            }
            catch(SqlException)
            {
            
            }
            finally
            {
                if(SQL_conn!=null)
                {
                    SQL_conn.Dispose();
                }
            }
            return fecha;
        }
    }
}
